///*
// * Level.cpp
// *
// *  Created on: 2013. 9. 14.
// *      Author: jjaehuny
// */
//
//#include "Level.h"
//
//#include <math.h>
//
//#include "../Enum.h"
//#include "../xldata/pcnew.h"
//
//#include "../User.h"
//
//namespace ProjectZ { namespace NLogic {
//
//
//const int INCREASE_SKILL_POINTS	= 1;
//const int INCREASE_STAT_POINTS	= 3;
//
//Level::Level(User * pUser) : _user(pUser), _level(1), _exp(0)
//{
//}
//
//Level::~Level()
//{
//}
//
//int
//Level::GetUserLevel()
//{
//	return _level;
//}
//
//int
//Level::GetUserExp()
//{
//	return _exp;
//}
//
//void
//Level::_setLevel(int level)
//{
//	_level = level;
//}
//
//void
//Level::_setExp(int exp)
//{
//	_exp = exp;
//}
//
//int
//Level::IncreaseExp(int exp)
//{
//	if( exp <= 0 )
//	{
//		return _exp;
//	}
//
//	if (_level >= 99)
//		return _exp;
//
//	int value = _exp + exp;
//	int maxExp = getMaxExp();
//	bool bLevelup = false;
//
//	while( value >= maxExp )
//	{
//		value -= maxExp;
//		_level++;
//		bLevelup = true;
//
//		if( _level >= 99 )
//		{
//			_level = 99;
//			_exp = 0;
//			break;
//		}
//		//
//		maxExp = getMaxExp();
//
//		//
//		_user->GetCharacterInfo().remain_stat_point += INCREASE_STAT_POINTS;
//		_user->GetCharacterInfo().remain_skill_point += INCREASE_SKILL_POINTS;
//
//		// and change stat
//		_user->GetCharacterInfo().str += getIncreaseStat(STAT_STR);
//		_user->GetCharacterInfo().dex += getIncreaseStat(STAT_DEX);
//		_user->GetCharacterInfo().con += getIncreaseStat(STAT_CON);
//		_user->GetCharacterInfo().spi += getIncreaseStat(STAT_SPI);
//	}
//
//	_exp = value;
//
//	this->SendMyLevelExp(bLevelup);
//	return _exp;
//}
//
//int
//Level::getMaxExp()
//{
//	int calc = _level -1;
//	return ( calc * ( pow(calc, 3) / 14 + 12 ) ) * 30;
//}
//
//int
//Level::getIncreaseStat(ESTATNAME statname)
//{
//	int class_type = _user->GetCharacterInfo().classtype;
//	int level = _level;
//	int needvalue = 0;
//
//	switch( statname )
//	{
//	case STAT_STR:	needvalue = NXLData::stPcnew_Pcnew[class_type].STR_UP18;	break;
//	case STAT_DEX:	needvalue = NXLData::stPcnew_Pcnew[class_type].DEX_UP19;	break;
//	case STAT_CON:	needvalue = NXLData::stPcnew_Pcnew[class_type].CON_UP20;	break;
//	case STAT_SPI:	needvalue = NXLData::stPcnew_Pcnew[class_type].SPI_UP21;	break;
//	default:	return 0;
//	}
//
//	int ret = 0;
//
//	if (level > 1)
//	{
//		if ( ((level - 1) % needvalue) == 0 )
//			ret = 1;
//	}
//
//	return ret;
//}
//
//void
//Level::SendMyLevelExp(bool bLevelUp)
//{
//	::Network::Packet * pAck = ::Network::GETPACKETPOOL()->SEND_NEW();
//	pAck->Write4(_user->GetGID());
//	pAck->MsgCat("%c", bLevelUp);							//u8	 레벨업 여부
//	pAck->MsgCat("%2d", _level);	//u16	현재 레벨
//	pAck->MsgCat("%d", _exp);		//u32	현재 경험치
//	pAck->MsgCat("%d", this->getMaxExp());	//u32	현 레벨 경험치 MAX
//	pAck->MsgCat("%c", 0);		//u8	챔피언 상태 레벨
//
//	// 레벨이 0이면 아래 두개 보내지 말것
//	//ack.Put32(0);		//u32	챔피언 경험치
//	//ack.Put32(0);		//u32	챔피언 맥스 경험치
//
//	pAck->MakePacket(CMD_SC_REQ_MY_LEVEL_EXP);
//	_user->Send(pAck);
//}
//
//} /*NLogic*/ } /* namespace ProjectZ */
